home *** CD-ROM | disk | FTP | other *** search
- 100 ' SAVE"HOST.BAS ' VERSION 1.00
- 110 '
- 120 ' ************************************************************************
- 130 ' ************************************************************************
- 140 '
- 150 ' HOST COMPUTER
- 160 '
- 170 ' This program provides the capability to access an IBM Personal
- 180 ' Computer for the purpose of transmitting or receiving an ASCII
- 190 ' file from a remote location. It assumes the use of a Hayes
- 200 ' Smartmodem.
- 210 '
- 220 ' Upon receiving a carrier from the remote location, the program
- 230 ' requests the password. It signs off if the correct password is not
- 240 ' given in three tries.
- 250 '
- 260 ' The program recognizes 7 commands from the user at the remote
- 270 ' location. They are:
- 280 ' A - List the files on drive A.
- 290 ' B - List the files on drive B.
- 300 ' G - Signoff (GOODBYE).
- 310 ' M - Send message.
- 320 ' R - Receive a file from the remote location.
- 330 ' T - Transmit a file to the remote location.
- 340 ' ? - Summarize the commands.
- 350 '
- 360 ' Received files are opened for APPEND so that data is attached to the
- 370 ' end of a previously used file. Also, if in the RECEIVE FILE mode, 15
- 380 ' seconds passes with no activity, the user at the remote location is
- 390 ' asked if the end of file has been reached. If the answer is in the
- 400 ' affirmative or if there is no response within 1 minute, the file is
- 410 ' closed and the RECEIVE FILE mode is deactivated.
- 420 '
- 430 ' The program recognizes 3 commands from the system operator at the IBM
- 440 ' PC's location. They are:
- 450 ' ALT E - Echo on / Echo off.
- 460 ' CTRL Prtsc - Printout on/ Printout off.
- 470 ' ALT M - Send message to remote location or to Smartmodem.
- 480 '
- 490 ' An active communications link times out after 5 minutes of inactivity.
- 500 '
- 510 ' ************************************************************************
- 520 ' WILLIAM HT BAILEY PHONE: 215-924-0771 JUNE 1982
- 522 '
- 525 ' DEBUGGED WITH THE HELP OF HOWARD CARTER
- 530 ' ************************************************************************
- 540 ' ************************************************************************
- 1000 '
- 1010 ' ------------ INITIALIZATION ------------
- 1020 '
- 1030 OPTION BASE 1: DIM MSG$(32): DEF SEG: POKE 106,0: CLOSE: CLS: KEY OFF
- 1040 DEFINT A-Z: XOFF$=CHR$(19): XON$=CHR$(17): CNT=0: FALSE=0: TRUE=NOT FALSE
- 1050 PAUSE=FALSE: PRNT=FALSE: ECHO=FALSE: RECV=FALSE: TRANS=FALSE: MESG=FALSE
- 1060 TIMER=FALSE: BYE=FALSE: ACTIVE=FALSE: AA=FALSE: CONNECT=FALSE: LF=FALSE
- 1065 OPMSG=FALSE: C$=""
- 1070 '
- 1080 MSG$(1)=CHR$(13)+CHR$(10)
- 1090 MSG$(2)="PASSWORD? "
- 1100 MSG$(3)="TRY AGAIN"+MSG$(1)
- 1110 MSG$(4)="*** ENTER ? FOR SUMMARY OF COMMANDS ***"+MSG$(1)
- 1120 MSG$(5)=">"
- 1130 MSG$(6)=MSG$(1)+"FILES A"+MSG$(1)
- 1140 MSG$(7)=MSG$(1)+"FILES B"+MSG$(1)
- 1150 MSG$(8)="*** GOODBYE ***"+MSG$(1)
- 1160 MSG$(9)="ENTER FILENAME IN THE FORMAT (DRIVE):(FILESPEC) "
- 1170 MSG$(10)=MSG$(1)+"*** READY TO RECEIVE FILE ***"+MSG$(1)
- 1180 MSG$(11)="RECEPTION SUSPENDED. END OF FILE? (Y/N) "+MSG$(1)+CHR$(7)
- 1190 MSG$(12)="*** RECEPTION TERMINATED ***"+MSG$(1)+CHR$(7)
- 1200 MSG$(13)=MSG$(1)+"*** TRANSMISSION BEGINNING IN 15 SECONDS ***"+MSG$(1)
- 1210 MSG$(14)=" TYPE X TO ABORT TRANSMISSION"+MSG$(1)
- 1220 MSG$(15)="*** TRANSMISSION COMPLETE ***"+MSG$(1)+CHR$(7)
- 1230 MSG$(16)=MSG$(1)+" --- SUMMARY OF COMMANDS ---"+MSG$(1)
- 1240 MSG$(17)="A - LIST THE FILES ON DRIVE A"+MSG$(1)
- 1250 MSG$(18)="B - LIST THE FILES ON DRIVE B"+MSG$(1)
- 1260 MSG$(19)="G - SIGNOFF (GOODBYE)"+MSG$(1)
- 1270 MSG$(20)="M - SEND MESSAGE"+MSG$(1)
- 1280 MSG$(21)="R - RECEIVE A FILE FROM YOUR LOCATION"+MSG$(1)
- 1290 MSG$(22)="T - TRANSMIT A FILE TO YOUR LOCATION"+MSG$(1)
- 1300 MSG$(23)="? - PRINT THE SUMMARY OF COMMANDS"+MSG$(1)+MSG$(1)
- 1310 MSG$(24)="--- FILE NOT FOUND ---"+MSG$(1)
- 1320 MSG$(25)="--- DISK IS FULL ---"+MSG$(1)
- 1330 MSG$(26)="--- BAD FILE NAME ---"+MSG$(1)
- 1340 MSG$(27)="--- TOO MANY FILES ---"+MSG$(1)
- 1350 MSG$(28)="--- DISK WRITE PROTECTED ---"+MSG$(1)
- 1360 MSG$(29)="--- DISK NOT READY ---"+MSG$(1)
- 1370 MSG$(30)="--- ERROR CONDITION ENCOUNTERED ---"+MSG$(1)
- 1380 MSG$(31)="ENTER 1 LINE MESSAGE"+MSG$(1)
- 1390 MSG$(32)="*** SYSTEM OPERATOR MESSAGE ***"+MSG$(1)+CHR$(7)
- 1400 '
- 1410 ON ERROR GOTO 2070
- 1420 OPEN "COM1:300,E,7,1" AS #1
- 1430 '
- 1440 LOCATE ,,1: PRINT #1,"********** HOST COMPUTER ON-LINE **********"
- 1450 PRINT #1,SPACE$(80);
- 1460 PRINT #1," YOUR NAME & PHONE NUMBER OR ANY THING ELSE IN HERE "
- 1700 '
- 1710 ' ***********************************************************************
- 1720 '
- 1730 ' --------- MAIN PROCESSING LOOP ---------
- 1740 '
- 1750 B$=INKEY$: IF LEN(B$)>1 THEN GOSUB 2240
- 1760 '
- 1770 IF LOF(1)<128 THEN PAUSE=TRUE: PRINT #1,XOFF$;
- 1780 IF EOF(1) THEN IF NOT AA THEN PRINT #1,"ATS0=1": AA=TRUE: GOTO 1895 ELSE GOTO 1895
- 1790 A$=INPUT$(LOC(1),#1)
- 1795 IF LF THEN LF=FALSE: C$=""
- 1797 IF LEN(C$)<254 THEN C$=C$+A$
- 1800 '
- 1810 FOR I=1 TO LEN(A$)
- 1820 D$=MID$(A$,I,1)
- 1825 IF D$=CHR$(13) OR D$=CHR$(10) THEN LF=TRUE
- 1830 IF D$=CHR$(10) THEN GOTO 1870
- 1840 IF PRNT AND NOT OPMSG THEN LPRINT D$;
- 1850 IF D$=CHR$(8) THEN IF POS(0)>1 THEN LOCATE ,POS(0)-1: PRINT " ";: LOCATE ,POS(0)-1: GOTO 1870
- 1860 PRINT D$;
- 1870 NEXT I: IF NOT LF THEN 1895
- 1875 '
- 1880 GOTO 3050
- 1890 '
- 1895 IF BYE THEN CNT2=CNT2+1: IF CNT2=1000 THEN 4550
- 1900 IF LOC(1)>0 OR BYE THEN 1750
- 1910 IF PAUSE THEN PAUSE=FALSE: PRINT #1,XON$;
- 1920 IF NOT CONNECT THEN 1750
- 1930 IF T1>VAL(MID$(TIME$,4,2))+(VAL(LEFT$(TIME$,2))*60) THEN 1750
- 1940 GOTO 4550
- 2000 '
- 2010 ' ***********************************************************************
- 2020 '
- 2030 ' ------------- SUBROUTINES --------------
- 2040 '
- 2050 ' ERROR HANDLER
- 2060 '
- 2070 M=30
- 2080 IF ERR=24 THEN PRINT "*** MODEM NOT READY ***": BEEP: STOP
- 2090 IF ERR=69 THEN RESUME
- 2100 IF ERR=27 THEN PRINT "PRINTER NOT READY ***": BEEP: RESUME NEXT
- 2110 IF ERR=53 THEN M=24
- 2120 IF ERR=61 THEN M=25
- 2130 IF ERR=64 THEN M=26
- 2140 IF ERR=67 THEN M=27
- 2150 IF ERR=70 THEN M=28
- 2160 IF ERR=71 THEN M=29
- 2170 IF M<>30 THEN PRINT MSG$(M): BEEP: GOTO 2190
- 2180 PRINT "--- ERROR";ERR;" ENCOUNTERED ON LINE";ERL;" ---": BEEP
- 2190 PRINT #1,MSG$(M);: IF PRNT THEN LPRINT MSG$(M);
- 2200 RECV=FALSE: TRANS=FALSE: CLOSE #2: RESUME 4160
- 2210 '
- 2220 ' SYSTEM OPERATOR COMMAND
- 2230 '
- 2240 CODE=ASC(MID$(B$,2,1))
- 2250 '
- 2260 IF CODE<>18 THEN 2300
- 2270 IF ECHO=FALSE THEN ECHO=TRUE: BEEP: PRINT "--- ECHO ON ---": RETURN
- 2280 ECHO=FALSE: BEEP: PRINT "--- ECHO OFF ---": RETURN
- 2290 '
- 2300 IF CODE<>114 THEN 2340
- 2310 IF PRNT=FALSE THEN PRNT=TRUE: BEEP: PRINT "--- PRINTOUT ON ---": RETURN
- 2320 PRNT=FALSE: BEEP: PRINT "--- PRINTOUT OFF ---": RETURN
- 2330 '
- 2340 IF CODE<>50 THEN RETURN
- 2350 PRINT #1,MSG$(32);: IF PRNT THEN LPRINT MSG$(32);
- 2355 IF ECHO THEN PRINT MSG$(32);
- 2360 IF NOT PAUSE THEN PRINT #1,XOFF$;
- 2370 B$=INKEY$
- 2380 IF LEN(B$)>1 THEN 2370
- 2390 IF B$="" THEN 2370 ELSE PRINT #1,B$;
- 2400 IF ECHO THEN PRINT B$;
- 2410 IF PRNT THEN LPRINT B$;
- 2420 IF B$<>CHR$(10) AND B$<>CHR$(13) THEN 2370
- 2430 IF NOT PAUSE THEN PRINT #1,XON$;
- 2435 OPMSG=TRUE
- 2440 RETURN
- 3000 '
- 3010 ' ***********************************************************************
- 3020 '
- 3030 ' ------------ COMMAND DECODE ------------
- 3040 '
- 3050 IF MESG THEN MESG=FALSE: GOTO 4160
- 3060 IF ACTIVE THEN 3130
- 3070 IF CONNECT THEN 3100
- 3080 '
- 3090 IF INSTR(C$,"NECT")<>0 THEN CONNECT=TRUE: GOTO 4050 ELSE GOTO 1900
- 3100 IF INSTR(C$,"WORD")<>0 OR INSTR(C$,"word")<>0 THEN VALID=TRUE: GOTO 4080
- 3110 VALID=FALSE: GOTO 4080
- 3120 '
- 3130 IF RECV OR TRANS THEN 3280
- 3140 IF BYE THEN 4550
- 3150 '
- 3160 IF OPMSG THEN OPMSG=FALSE: GOTO 4160
- 3165 IF INSTR(C$,"CARRIER")<>0 THEN BYE=TRUE: GOTO 4550
- 3170 IF INSTR(C$,"M")<>0 OR INSTR(C$,"m")<>0 THEN 5150
- 3180 IF INSTR(C$,"?")<>0 THEN 5200
- 3190 IF INSTR(C$,"A")<>0 OR INSTR(C$,"a")<>0 THEN C$="A": M=6: GOTO 5070
- 3200 IF INSTR(C$,"B")<>0 OR INSTR(C$,"b")<>0 THEN C$="B": M=7: GOTO 5070
- 3210 IF INSTR(C$,"R")<>0 OR INSTR(C$,"r")<>0 THEN 6050
- 3220 IF INSTR(C$,"T")<>0 OR INSTR(C$,"t")<>0 THEN 7050
- 3230 IF INSTR(C$,"G")<>0 OR INSTR(C$,"g")<>0 THEN 4550
- 3240 PRINT #1,MSG$(3);: IF PRNT THEN LPRINT MSG$(3);
- 3250 IF ECHO THEN PRINT MSG$(3);
- 3260 GOTO 4160
- 3270 '
- 3280 M=INSTR(C$,"A:"): IF M<>0 THEN 3330
- 3290 M=INSTR(C$,"a:"): IF M<>0 THEN 3330
- 3300 M=INSTR(C$,"B:"): IF M<>0 THEN 3330
- 3310 M=INSTR(C$,"b:"): IF M=0 THEN 3240
- 3320 '
- 3330 F$=MID$(C$,M,14)
- 3340 IF RIGHT$(F$,1)=CHR$(10) OR RIGHT$(F$,1)=CHR$(13) THEN F$= LEFT$(F$,LEN(F$)-1): GOTO 3340
- 3350 IF RECV THEN 6080 ELSE GOTO 7080
- 4000 '
- 4010 ' ***********************************************************************
- 4020 '
- 4030 ' --------------- SIGN ON ----------------
- 4040 '
- 4050 PRINT #1,MSG$(2);: IF PRNT THEN LPRINT MSG$(2);
- 4055 IF ECHO THEN PRINT MSG$(2);
- 4060 T1=VAL(MID$(TIME$,4,2))+(VAL(LEFT$(TIME$,2))*60)+2: GOTO 1900
- 4070 '
- 4080 IF VALID THEN 4130
- 4085 IF INSTR(C$,"CARRIER")<>0 THEN 4655
- 4090 CNT=CNT+1: IF CNT>=3 THEN 4550
- 4100 PRINT #1,MSG$(3);: IF PRNT THEN LPRINT MSG$(3);
- 4105 IF ECHO THEN PRINT MSG$(3);
- 4110 GOTO 1900
- 4120 '
- 4130 ACTIVE=TRUE
- 4140 PRINT #1,MSG$(4);: IF PRNT THEN LPRINT MSG$(4);
- 4145 IF ECHO THEN PRINT MSG$(4);
- 4150 '
- 4151 ' COME HERE AFTER PROCESSING A COMMAND
- 4152 '
- 4160 PRINT #1,MSG$(5);: IF PRNT THEN LPRINT MSG$(5);
- 4165 IF ECHO THEN PRINT MSG$(5);
- 4170 '
- 4180 ' SET TIMEOUT CLOCK
- 4190 '
- 4200 T1=VAL(MID$(TIME$,4,2))+(VAL(LEFT$(TIME$,2))*60)+5: GOTO 1900
- 4500 '
- 4510 ' ***********************************************************************
- 4520 '
- 4530 ' --------------- SIGN OFF ---------------
- 4540 '
- 4550 IF BYE THEN 4635
- 4560 PRINT #1,MSG$(8);: IF PRNT THEN LPRINT MSG$(8);
- 4565 IF ECHO THEN PRINT MSG$(8);
- 4570 '
- 4580 FOR I=1 TO 2000: NEXT I
- 4590 PRINT #1,"+++";: IF ECHO THEN PRINT "+++"
- 4600 FOR I=1 TO 2000: NEXT I
- 4610 '
- 4620 CNT2=0: BYE=TRUE: GOTO 1900
- 4630 '
- 4635 IF INSTR(C$,"CARRIER")<>0 THEN 4655
- 4640 IF INSTR(C$,"OK")=0 THEN 4580
- 4655 BYE=FALSE: CONNECT=FALSE: ACTIVE=FALSE: CNT=0
- 4660 CLS: PRINT "********** HOST COMPUTER program active **********"
- 4665 PRINT #1,"ATH"
- 4670 GOTO 1750
- 5000 '
- 5010 ' ***********************************************************************
- 5020 '
- 5030 ' ----------- COMMANDS A,B,M,? -----------
- 5040 '
- 5050 ' LIST FILES (Modifications necessary if using graphics display.)
- 5060 '
- 5070 CLS: PRINT #1,MSG$(M);
- 5080 FILES C$+":*.*": PRINT: DEF SEG=&HB000: FOR I=0 TO (80*(CSRLIN-1)-1)
- 5090 B$=CHR$(PEEK(2*I)): PRINT #1,B$;: IF PRNT THEN LPRINT B$;
- 5095 NEXT I
- 5100 PRINT #1,MSG$(1);: IF PRNT THEN LPRINT MSG$(1);
- 5105 IF ECHO THEN PRINT MSG$(1);
- 5110 GOTO 4160
- 5120 '
- 5130 ' USER MESSAGE
- 5140 '
- 5150 PRINT "*** USER MESSAGE ***": BEEP: PRINT #1,MSG$(31);
- 5160 IF PRNT THEN LPRINT "*** USER MESSAGE ***"
- 5165 MESG=TRUE: GOTO 4160
- 5170 '
- 5180 ' LIST SUMMARY OF COMMANDS
- 5190 '
- 5200 FOR M=16 TO 23
- 5210 PRINT #1,MSG$(M);: IF PRNT THEN LPRINT MSG$(M);
- 5215 IF ECHO THEN PRINT MSG$(M);
- 5220 NEXT M: GOTO 4160
- 6000 '
- 6010 ' ***********************************************************************
- 6020 '
- 6030 ' ------------- RECEIVE FILE -------------
- 6040 '
- 6050 PRINT #1,MSG$(9);: IF PRNT THEN LPRINT MSG$(9);
- 6055 IF ECHO THEN PRINT MSG$(9);
- 6060 RECV=TRUE: GOTO 1900
- 6070 '
- 6080 OPEN F$ FOR APPEND AS #2
- 6090 PRINT #1,MSG$(10);: IF PRNT THEN LPRINT MSG$(10);
- 6095 IF ECHO THEN PRINT MSG$(10);
- 6100 '
- 6110 B$=INKEY$: IF LEN(B$)>1 THEN GOSUB 2240
- 6115 IF OPMSG THEN OPMSG=FALSE
- 6120 '
- 6130 IF LOF(1)<128 THEN PAUSE=TRUE: PRINT #1,XOFF$;
- 6140 IF EOF(1) THEN IF TIMER THEN 6270 ELSE GOTO 6220
- 6145 IF TIMER THEN TIMER=FALSE
- 6150 A$=INPUT$(LOC(1),#1): PRINT #2,A$;
- 6152 FOR I=1 TO LEN(A$): D$=MID$(A$,I,1)
- 6154 IF D$=CHR$(10) THEN 6158
- 6156 IF ECHO THEN PRINT D$;
- 6158 NEXT I
- 6160 IF LOC(1)>0 THEN 6130
- 6170 IF PAUSE THEN PAUSE=FALSE: PRINT #1,XON$;
- 6180 GOTO 6110
- 6190 '
- 6200 ' SET TIMEOUT CLOCK
- 6210 '
- 6220 T2=VAL(RIGHT$(TIME$,2))+(VAL(MID$(TIME$,4,2))*60)+15
- 6230 TIMER=TRUE: GOTO 6110
- 6240 '
- 6250 ' CHECK TIMEOUT CLOCK
- 6260 '
- 6270 IF T2>VAL(RIGHT$(TIME$,2))+(VAL(MID$(TIME$,4,2))*60) THEN 6110
- 6280 '
- 6290 ' END OF FILE?
- 6300 '
- 6310 PRINT #1,MSG$(11);: IF PRNT THEN LPRINT MSG$(11);
- 6315 IF ECHO THEN PRINT MSG$(11);
- 6320 T3=VAL(MID$(TIME$,4,2))+(VAL(LEFT$(TIME$,2))*60)+1
- 6330 IF T3<VAL(MID$(TIME$,4,2))+(VAL(LEFT$(TIME$,2))*60) THEN 6370
- 6340 IF EOF(1) THEN 6330
- 6350 B$=INPUT$(LOC(1),#1): IF INSTR(B$,"Y")=0 AND INSTR(B$,"y")=0 THEN TIMER=FALSE: GOTO 6110
- 6360 '
- 6370 PRINT #1,MSG$(12);: IF PRNT THEN LPRINT MSG$(12);
- 6375 IF ECHO THEN PRINT MSG$(12);
- 6380 CLOSE #2: RECV=FALSE: TIMER=FALSE: GOTO 4160
- 7000 '
- 7010 ' ***********************************************************************
- 7020 '
- 7030 ' ------------- TRANSMIT FILE -------------
- 7040 '
- 7050 PRINT #1,MSG$(9);: IF PRNT THEN LPRINT MSG$(9);
- 7055 IF ECHO THEN PRINT MSG$(9);
- 7060 TRANS=TRUE: GOTO 1900
- 7070 '
- 7080 OPEN F$ FOR INPUT AS #2: FOR M=13 TO 14
- 7090 PRINT #1,MSG$(M);: IF PRNT THEN LPRINT MSG$(M);
- 7095 IF ECHO THEN PRINT MSG$(M);
- 7100 NEXT M: FOR I=1 TO 14000: NEXT I
- 7110 '
- 7120 B$=INKEY$: IF LEN(B$)>1 THEN GOSUB 2240
- 7125 IF OPMSG THEN OPMSG=FALSE
- 7130 '
- 7140 IF EOF(2) THEN 7210
- 7150 A$=INPUT$(1,#2): PRINT #1,A$;
- 7160 IF A$<>CHR$(10) AND ECHO THEN PRINT A$;
- 7170 '
- 7180 IF EOF(1) THEN 7120
- 7190 B$=INPUT$(LOC(1),#1): IF INSTR(B$,"X")<>0 OR INSTR(B$,"x")<>0 THEN 7210
- 7195 IF INSTR(B$,"CARRIER")<>0 THEN CLOSE #2: TRANS=FALSE: GOTO 4655
- 7200 '
- 7210 PRINT #1,MSG$(15);: IF PRNT THEN LPRINT MSG$(15);
- 7215 IF ECHO THEN PRINT MSG$(15);
- 7220 CLOSE #2: TRANS=FALSE: GOTO 4160
- 9996 '
- 9997 ' **********************************************************************
- 9998 ' **********************************************************************
- 9999 END